<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Dependency-Inversion-Prinzip</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Dependency-Inversion-Prinzip"> <link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Dependency-Inversion-Prinzip rootpage-Dependency-Inversion-Prinzip skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Dependency-Inversion-Prinzip</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p>Das <b>Dependency Inversion Principle</b> (<b>DIP</b>, <a href="Englische_Sprache" title="Englische Sprache">englisch</a> für <b>Abhängigkeits-Umkehr-Prinzip</b>) ist ein Prinzip beim <a href="Objektorientiertes_Design" class="mw-redirect" title="Objektorientiertes Design">objektorientierten Entwurf</a> von <a href="Software" title="Software">Software</a>. Es beschäftigt sich mit der Abhängigkeit von <a href="Modul_(Software)" title="Modul (Software)">Modulen</a>.
</p><p>Im Allgemeinen wird das DIP beschrieben durch:
</p>
<dl><dd><i>Module höherer Ebenen sollten nicht von Modulen niedrigerer Ebenen abhängen.<br>Beide sollten von Abstraktionen abhängen.</i></dd>
<dd><i>Abstraktionen sollten nicht von Details abhängen.<br>Details sollten von Abstraktionen abhängen.</i></dd></dl>
<div class="mw-heading mw-heading2"><h2 id="Problemstellung_und_Lösung"><span id="Problemstellung_und_L.C3.B6sung"></span>Problemstellung und Lösung</h2></div>
<p><a href="Objektorientiertes_Design" class="mw-redirect" title="Objektorientiertes Design">Objektorientierte Entwürfe</a> werden in <a href="Modul_(Software)" title="Modul (Software)">Module</a> strukturiert, die unterschiedliche Verantwortlichkeiten umsetzen. Eine gängige Praxis ist das Anordnen der Module in Ebenen. Je niedriger die Ebene eines Moduls, desto spezieller sind die Vorgänge, die es definiert. In Modulen niedrigerer Ebenen werden Abläufe definiert, welche von allgemeineren Abläufen in höheren Ebenen benutzt werden.
</p><p>Falls diese Anordnung falsch umgesetzt wird, also Module höherer Ebenen von Modulen niedrigerer Ebenen abhängen, entsteht ein Problem. Änderungen in Modulen niedrigerer Ebenen führen unweigerlich zu Änderungen in Modulen höherer Ebenen. Dies widerspricht aber einerseits dem eigentlichen Ansatz der Hierarchie, andererseits führt es zu zyklischen Abhängigkeiten. Dadurch kommt es zu einer erhöhten <a href="Kopplung_(Softwareentwicklung)" title="Kopplung (Softwareentwicklung)">Kopplung</a> der Module, welche Änderungen in Architektur und Design unnötig verkomplizieren.
</p><p>Der Lösungsansatz ist die Invertierung der Abhängigkeit. Das Modul der höheren Ebene definiert die Schnittstelle, mit der es arbeitet. Module niedrigerer Ebene realisieren die Schnittstelle.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiel">Beispiel</h2></div>
<p>Wir betrachten ein einfaches Schalter-Lampe-Modell. Das Drücken des Schalters soll die Lampe an- oder ausschalten.
</p><p>Eine einfache Implementierung in <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Lampe</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">leuchtet</span><span class="p">;</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">anschalten</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">leuchtet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">ausschalten</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">leuchtet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Schalter</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">Lampe</span><span class="w"> </span><span class="n">lampe</span><span class="p">;</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">gedrueckt</span><span class="p">;</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">Schalter</span><span class="p">(</span><span class="n">Lampe</span><span class="w"> </span><span class="n">lampe</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">lampe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lampe</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">drueckeSchalter</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">gedrueckt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">!</span><span class="n">gedrueckt</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="n">gedrueckt</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">lampe</span><span class="p">.</span><span class="na">anschalten</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">lampe</span><span class="p">.</span><span class="na">ausschalten</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Schalter steuert den Ablauf des Verhaltens und benutzt dazu Lampe. Demnach sollte es einem Modul höherer Ebene angehören. Jedoch verletzt das beschriebene Modell das DIP, da Schalter abhängig von Lampe ist. Wird entschieden, dass die Methoden von Lampe umbenannt werden, muss auch Schalter geändert werden.
</p><p>Das grundlegende Problem ist, dass Schalter direkt mit Lampe arbeitet, welches zu einem niedrigeren Modul gehört. Schalter sollte selbst definieren, wie das Objekt aussehen sollte, mit dem es arbeitet.
</p><p>Die Lösung in Java:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">interface</span> <span class="nc">Geraet</span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">anschalten</span><span class="p">();</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">ausschalten</span><span class="p">();</span>
<span class="p">}</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Lampe</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">Geraet</span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">leuchtet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">anschalten</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">leuchtet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">ausschalten</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">leuchtet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Schalter</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">Geraet</span><span class="w"> </span><span class="n">lampe</span><span class="p">;</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">gedrueckt</span><span class="p">;</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">Schalter</span><span class="p">(</span><span class="n">Geraet</span><span class="w"> </span><span class="n">lampe</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">lampe</span><span class="o">=</span><span class="w"> </span><span class="n">lampe</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">drueckeSchalter</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">gedrueckt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">!</span><span class="n">gedrueckt</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="n">gedrueckt</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">lampe</span><span class="p">.</span><span class="na">anschalten</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">lampe</span><span class="p">.</span><span class="na">ausschalten</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Service_Provider_Interface" title="Service Provider Interface">Service Provider Interface</a></li>
<li><a href="Plug-in" title="Plug-in">Plug-in</a></li>
<li><a href="Inversion_of_Control" title="Inversion of Control">Inversion of Control</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Robert C. Martin: <cite style="font-style:italic">The Dependency Inversion Principle</cite>. Mai 1996 (<style data-mw-deduplicate="TemplateStyles:r261891140">
/* start https://de.wikipedia.org/ */
.mw-parser-output .webarchiv-memento a{color:inherit}
/* end https://de.wikipedia.org/ */
</style><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110714224327/http://www.objectmentor.com/resources/articles/dip.pdf">PDF</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 14. Juli 2011 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>)).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Dependency-Inversion-Prinzip&rft.au=Robert+C.+Martin&rft.btitle=The+Dependency+Inversion+Principle&rft.date=1996-05&rft.genre=book" style="display:none"> </span></li></ul>
<style data-mw-deduplicate="TemplateStyles:r261921266">
/* start https://de.wikipedia.org/ */
.mw-parser-output table.erw-nav-zebra>tbody>:nth-child(odd){background-color:var(--dewiki-hintergrundfarbe-basis)}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste{background-color:#f5f5f5}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe{background-color:#e5ecf2}.mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,.mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#ececec}.mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt>.wikitable>*>tr{border-top:2px solid #fdfdfd!important;border-bottom:2px solid #fdfdfd!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-night .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-os .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable{border-top:0px!important;border-bottom:0px!important;margin-top:0!important;margin-bottom:0!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:first-of-type td{border-top:0px!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:last-of-type td{border-bottom:0px!important}
/* end https://de.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r260755238">
/* start https://de.wikipedia.org/ */
.mw-parser-output div.klappleiste{border:1px solid var(--dewiki-rahmenfarbe1);clear:both;font-size:95%;box-sizing:border-box;margin-top:1.5em;padding:2px}.mw-parser-output div.klappleiste:after{clear:both;content:"";display:block}.mw-parser-output div.klappleiste-bild{float:left;padding:2px}.mw-parser-output div.klappleiste-kopf{background:var(--dewiki-hintergrundfarbe5);color:var(--color-base,#202122);text-align:center;font-weight:bold}.mw-parser-output div.klappleiste.mw-collapsed .klappleiste-bild{display:none}.mw-parser-output div.klappleiste+div.klappleiste,.mw-parser-output div.klappleiste+link+div.klappleiste,.mw-parser-output div.klappleiste+link+link+div.klappleiste,.mw-parser-output div.klappleiste+link+style+div.klappleiste,.mw-parser-output div.klappleiste+style+div.klappleiste,.mw-parser-output div.klappleiste+style+style+div.klappleiste,.mw-parser-output div.klappleiste+style+link+div.klappleiste{margin-top:-1px}@media screen{html.skin-theme-clientpref-night .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}
/* end https://de.wikipedia.org/ */
</style>
<div class="klappleiste mw-collapsible navileiste erweiterte-navigationsleiste navigation-not-searchable center erw-nav-farbschema-blau" role="navigation">
<div class="klappleiste-kopf"><a href="Prinzipien_objektorientierten_Designs" title="Prinzipien objektorientierten Designs">Prinzipien objektorientierten Designs</a><div class="erweiterte-navigationsleiste-quicklinks" style="float:left; font-weight:normal; font-size:75%; margin-left:1em; margin-right:2em; display:none;"><span title="Vorlage anzeigen">V</span> </div></div>
<div class="klappleiste-inhalt mw-collapsible-content" style="clear:left">
<table class="wikitable erw-nav-zebra" style="width:100%;margin:0;text-align:left;font-size:95%;margin-top:.1em;margin-bottom:.0em;">
<tbody><tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b>SOLID-Prinzipien</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Single-Responsibility-Prinzip" title="Single-Responsibility-Prinzip">Single Responsibility</a> • <a href="Open-Closed-Prinzip" title="Open-Closed-Prinzip">Open Closed</a> • <a href="Liskovsches_Substitutionsprinzip" title="Liskovsches Substitutionsprinzip">Liskovsches Substitutionsprinzip</a> • <a href="Interface-Segregation-Prinzip" title="Interface-Segregation-Prinzip">Interface Segregation</a> • <a class="mw-selflink selflink">Dependency Inversion</a>
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b>Weitere Prinzipien</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Gesetz_von_Demeter" title="Gesetz von Demeter">Gesetz von Demeter</a> • <a href="Design_by_Contract" title="Design by Contract">Design by Contract</a> • <a href="Datenkapselung_(Programmierung)" title="Datenkapselung (Programmierung)">Datenkapselung</a> • Linguistic Modular Units • Self-Documentation • Uniform Access • Single Choice • Persistence Closure • <a href="Command-Query-Separation" title="Command-Query-Separation">Command-Query-Separation</a>
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 1px solid #FFF;padding: 0 1em;"><b>Packaging-Prinzipien</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>Reuse Release Equivalence • Common Closure • Common Reuse • Acyclic Dependencies • Stable Dependencies • Stable Abstractions
</p>
</td></tr>
</tbody></table></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-05-28" href="https://de.wikipedia.org/wiki/?title=Dependency-Inversion-Prinzip&oldid=256423578">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>